import { createApp } from 'vue'
import { createI18n } from 'vue-i18n'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import App from './App.vue'
import router from './router/index'
import LoadingOverlay from '@/components/common/LoadingOverlay.vue'
import ContactFloat from '@/components/business/ContactFloat.vue'
import 'element-plus/dist/index.css'
import './styles/global.scss'
import './styles/responsive.scss'
import zhCN from './locales/zh-CN.json'
import en from './locales/en.json'
import ErrorBoundary from './components/ErrorBoundary.vue'

// 从环境变量获取默认语言
const defaultLocale = import.meta.env.VITE_DEFAULT_LOCALE
const fallbackLocale = import.meta.env.VITE_FALLBACK_LOCALE

// 从 localStorage 获取保存的语言设置
const savedLocale = localStorage.getItem('locale') || defaultLocale

// 国际化配置
const i18n = createI18n({
  legacy: false,
  locale: savedLocale,
  fallbackLocale: fallbackLocale,
  messages: {
    'zh-CN': zhCN,
    'en': en
  }
})


// Pinia状态管理
const pinia = createPinia()

// 创建应用实例
const app = createApp(App)

// 全局错误处理
// app.config.errorHandler = (err, vm, info) => {
//   console.error('全局错误：', err)
//   console.error('错误信息：', info)
//   // 可以在这里添加错误上报逻辑
// }

// 加载插件
app.use(ElementPlus)
app.use(router)
app.use(pinia)
app.use(i18n)

// 全局属性
app.config.globalProperties.$ELEMENT = { 
  size: 'large',
  zIndex: 3000
}

// 注册全局组件
app.component('LoadingOverlay', LoadingOverlay)
app.component('ContactFloat', ContactFloat)
app.component('ErrorBoundary', ErrorBoundary)

// 路由挂载（带错误处理）
const initializeApp = async () => {
  try {
    await router.isReady()
    app.mount('#app')
  } catch (error) {
    console.error('应用初始化失败:', error)
    // 可以在这里添加错误上报或用户提示
    document.getElementById('app').innerHTML = 
      `<div class="error-message">${i18n.global.t('errors.initialization')}</div>`
  }
}

// 启动应用
initializeApp()

// 生产环境禁用警告
if (import.meta.env.PROD) {
  app.config.warnHandler = () => {}
}
